package com.sq.partner.manager.service;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

import com.sq.partner.manager.mybatis.model.GatewayMenu;
import com.sq.partner.manager.mybatis.model.GatewayScanUnionMenu;
import org.springframework.stereotype.Service;

import com.sq.partner.manager.mybatis.model.GatewayScanUnionCode;
import com.sq.partner.manager.util.Page;

public interface UnionScanManagerService {
	
	/**
	 * 根据分页及条件，查询分页后的聚合二维码列表
	 * @param page
	 * @return
	 * @throws Exception
	 */
	public Page<GatewayScanUnionCode> queryUnionQRCodeListByPageNumber(Page<GatewayScanUnionCode> page) throws Exception;
	
	/**
	 * @since 2022.3.2
	 * @description:根据条件查询有效数据的数量
	 * @param page
	 * @return int
	 * @throws Exception
	 */
	public int queryUnionCodeCountByConditions(Page<GatewayScanUnionCode> page) throws Exception;
	
	/**
	 * @since：2022年7月19日
	 * @description:	
	 * @param page
	 * @return
	 * @throws Exception
	 */
	public Page<Map<String,Object>> queryUnionCodeCanBeConfigByPageNumber(Page<Map<String,Object>> page) throws Exception;

	public Page<Map<String,Object>> queryMenuCanBeConfigByPageNumber(Page<Map<String,Object>> page) throws Exception;

	/**
	 * @since：2022年7月19日
	 * @description:	
	 * @param page
	 * @return
	 * @throws Exception
	 */
	public int queryUnionCodeCanBeCinfigCountByConditions(Page<Map<String,Object>> page) throws Exception;

	public int queryMenuCanBeCinfigCountByConditions(Page<Map<String,Object>> page) throws Exception;

	/**
	 * @since：2022年7月26日
	 * @description: 查询已配置二维码的分页信息	
	 * @param page
	 * @return
	 * @throws Exception
	 */
	public Page<Map<String, Object>> queryConfigedUnionCodeByPage(Page<Map<String, Object>> page) throws Exception;

	/**
	 *
	 * @param page
	 * @return
	 * @throws Exception
	 */
	public Page<Map<String, Object>> queryConfigedMenuByPage(Page<Map<String, Object>> page) throws Exception;
	
	public int queryConfigedUnionCodeCountByPage(Page<Map<String, Object>> page) throws Exception;

	public int queryConfigedMenuCountByPage(Page<Map<String, Object>> page) throws Exception;
	
	/**
	 * @since：2022年7月28日
	 * @description:删除已配置的方案
	 * @param id
	 * @throws Exception
	 */
	public boolean deleteConfigedUnionCode(String id) throws Exception;

	/**
	 * 删除已配置的菜单
	 * @param id
	 * @return
	 * @throws Exception
	 */
	public boolean deleteMenuUnion(String id) throws Exception;
	
	/**
	 * @since：2022年7月29日
	 * @description:关联方案到菜单上
	 * @param ids
	 * @param unionCodeId
	 * @return
	 * @throws Exception
	 */
	public boolean insertUnionCodeRela(String[] ids,String unionCodeId,String[] names,String menuId,String queryMenuLevel) throws Exception;

	/**
	 *
	 * @param ids
	 * @param menuId
	 * @return
	 * @throws Exception
	 */
	public boolean insertMenuRela(String[] ids,String menuId) throws Exception;

	/**
	 * @since：2022年8月1日
	 * @description:	添加新的聚合二维码
	 * @param param
	 * @return
	 * @throws Exception
	 */
	public int addNewUnionCode(Map<String,String> param) throws Exception;

	/**
	 * @since：2022年8月1日
	 * @description:	添加新的菜单
	 * @param param
	 * @return
	 * @throws Exception
	 */
	public int addNewMenu(Map<String,String> param) throws Exception;

	/**
	 * 添加前类型校验
	 * @param menuId
	 * @param type
	 * @return
	 * @throws Exception
	 */
	public boolean checkBeforeAdd(String menuId,String type) throws Exception;

	/**
	 * 删除后类型校验
	 * @param menuId
	 * @throws Exception
	 */
	public void checkAfterDelete(String menuId,String type) throws Exception;
	
	/**
	 * @since：2022年8月8日
	 * @description:	根据ID查单独一个聚合二维码
	 * @param id
	 * @return
	 * @throws Exception
	 */
	public GatewayScanUnionCode querySingleUnionCodeById(int id) throws Exception;
	
	public boolean deleteUnionCode(String codeId) throws Exception;

	public boolean deleteMenu(String menuId) throws Exception;

	/**
	 * 根据分页及条件，查询分页后的一级菜单列表
	 * @param page
	 * @return
	 */
	Page<GatewayScanUnionMenu> queryMenuListByPageNumber(Page<GatewayScanUnionMenu> page) throws Exception;

	/**
	 * 根据条件查询有效数据的数量
	 * @param page
	 * @return
	 */
	int queryMenuListByConditions(Page<GatewayScanUnionMenu> page) throws Exception;

	/**
	 * 更新菜单名和菜单描述
	 * @param param
	 * @return
	 */
	boolean updateNewMenu(Map<String, String> param) throws Exception ;

	GatewayMenu querySingleMenuById(int codeId) throws Exception;

	String queryMenuLevel(HashMap<String, Object> hashMap)throws SQLException;

	/**
	 * 查询菜单下关联的方案数量
	 * @param menuId
	 * @return
	 */
	Integer selectPlanCountByMenuId(String menuId)throws SQLException;

	/**
	 * 根据二维码id查询对应一级菜单下关联的方案数量
	 * @param codeId
	 * @return
	 * @throws SQLException
	 */
	Integer selectPlanCountByUnionCode(String codeId)throws SQLException;

	/**
	 * 根据二维码id查询对应一级菜单下关联的二级菜单数量
	 * @param codeId
	 * @return
	 * @throws SQLException
	 */
	Integer selectMenuCountByUnionCode(String codeId)throws SQLException;

	/**
	 * 删除二维码对应的一级菜单
	 * @param codeId
	 * @return
	 * @throws SQLException
	 */
	boolean deleteMenuByUnionCode(String codeId) throws Exception;

	Integer selectSubMenuCountByMenuId(String menuId) throws SQLException;

	boolean deleteUnionCodeByMenuId(String menuId) throws Exception;
}
